package cc.linker.steplink.crm.dao;

import cc.linker.steplink.crm.domain.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface SyncDao {

    /**
     * 添加C端用户
     *
     * @param customer
     * @return
     */
    Integer addCustomer(Customer customer);

    /**
     * 添加用户扩展信息
     *
     * @param customer
     * @return
     */
    Integer addCustomerInfo(CustomerInfo customer);

    /**
     * 更新C端用户
     *
     * @param customer
     * @return
     */
    Integer updateCustomer(Customer customer);

    /**
     * 更新用户扩展信息
     *
     * @param customerInfo
     * @return
     */
    Integer updateCustomerInfo(CustomerInfo customerInfo);

    /**
     * 添加idp标签
     *
     * @param idpLabels
     * @return
     */
    Integer addLabels(List idpLabels);

    /**
     * 给用户添加idp标签
     *
     * @param idpLabels
     * @return
     */
    Integer addLabelsToCustomer(List idpLabels);

    /**
     * idp属性名字典
     *
     * @return
     */
    List<Map<String, Object>> findIdpNamesDict();

    /**
     * 按类型和机构查询标签
     *
     * @param labelType
     * @param orgId
     * @return
     */
    List<Label> findLabelsByType(@Param("labelType") Integer labelType, @Param("orgId") String orgId);

    /**
     * 删除用户标签
     *
     * @param customerId
     * @param labelType
     * @return
     */
    Integer deleteCustomerLabels(@Param("customerId") String customerId,
                                 @Param("labelType") Integer labelType);

    /**
     * 保存用户最近行为
     *
     * @param action
     * @return
     */
    Integer saveIdpAction(Action action);

    /**
     * 保存行为记录
     *
     * @param log
     * @return
     */
    Integer saveActionLog(ActionLog log);

    /**
     * 根据openid和token查找用户
     *
     * @param idpOpenid
     * @param idpToken
     * @return
     */
    Customer findCustomerByOpenidAndToken(@Param("openid") String idpOpenid, @Param("token") String idpToken);

    /**
     * 更新机构信息
     *
     * @param customerId
     * @param orgId
     */
    Integer updateCustomerByCustomerId(@Param("customerId") String customerId, @Param("orgId") String orgId);

    /**
     * 获取token+orgId+time列表
     *
     * @return
     */
    List<Map<String, Object>> getTokenList(@Param("confName") String confName, @Param("specifyOrgId") String specifyOrgId);
}
